{
  description = "Полная конфигурация файла flake.nix";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
   inputs.kataContainers.url = "github:your-user/kata-containers";
  outputs = { self, nixpkgs, kataContainers /* комментарий: Объявление выходов flake.nix */ }: {

    # -----------------------------
    # 1) Разделение диска и монтирование
    # -----------------------------
    let
      disk = "/dev/sda";                      # Диск для установки
      bootPartition = "${disk}1";             # Раздел загрузки
      rootPartition = "${disk}2";             # Корневой раздел
      homePartition = "${disk}3";             # Раздел home
      swapPartition = "${disk}4";             # Раздел подкачки
      mountDir = "/mnt";                      # Точка монтирования
      bootDir = "${mountDir}/boot";           # Каталог загрузки
      homeDir = "${mountDir}/home";           # Каталог home
    in {

    bios:
    partitioning = ''
    parted --script ${disk} \
    mklabel msdos \
    mkpart primary ext2 500MiB \
    mkpart primary ext4 29GiB 56GiB \
    mkpart primary ext4 930GiB \
    mkpart primary linux-swap 9GiB 100% \
    set 1 boot on
    '';
              # Комментарий: Создание разделов на диске

    formatting = ''                            # Форматирование разделов
      mkfs.ext2 -L boot ${bootPartition}
      mkfs.ext4 -L root ${rootPartition}
      mkfs.ext4 -L home ${homePartition}
      mkswap -L swap ${swapPartition}
    '';

    mounting = ''                              # Монтирование разделов
      mount ${rootPartition} ${mountDir} { options = [ "defaults" "noatime" ]; }
      mkdir -p ${bootDir}
      mkdir -p ${homeDir}
      mount ${bootPartition} ${bootDir}
      mount ${homePartition} ${homeDir} { options = [ "defaults" "noatime" ]; }
      swapon ${swapPartition}
    '';

    # ------------------------------
    # 2) Загрузочный образ Minimal ISO
    # ------------------------------
    nixosInstallation = {
      url = "https://channels.nixos.org/nixos-23.11/latest-nixos-minimal-x86_64-linux.iso";
    };

    # ----------------------------------------
    # 3) Использование операционной системы NixOS
    # ----------------------------------------
    system = "x86_64-linux";

    # ---------------------------------------
    # 4) Использование системы инициализации nixos-init
    # ---------------------------------------
    boot.kernel.sysvInitPath = "/run/current-system/sw/bin/nixos-init";
    
        # --------------------------------------
    # 5) Настройка и интеграция Kata Containers
    # --------------------------------------
    boot.initrd.availableKernelModules = [ "virtio_pci" ];
    boot.initrd.kernelModules = [ "kvm" "kvm-intel" "virtio_pci" ];
    boot.kernelModules = [ "kvm" "kvm-intel" "virtio_pci" ];

    boot.kernelParams = [
      "kata-vhost-allow-untrusted=off" # Запрет подключения внешних устройств.
      "intel_iommu=on"
    ];



    # -------------------------------------
    # 6) Инструкции по установке и настройке
    # -------------------------------------
outputs = { self, nixpkgs, newm-atha }: {

  # ...

  setupInstructions = ''
    # Установка и настройка необходимых пакетов и действий
    # Установка необходимых пакетов
    environment.systemPackages = with pkgs; [
      libressl dhcpcd util-linux micro fonts keyMap qemu-kvm alsa-utils
      alsa-lib alsa-plugins mesa alacritty sakura
      htop links imv mpv ranger libav-tools eudev eudev-libs udevil gpm
      (udevil.override { enablePkgs = [gpm]; }) 
      xfe
      (nixpkgs.callPackage (fetchFromSourcehut {
        owner = "atha";
        repo = "newm-atha";
        rev = "newm-atha";
        outputHashes = ["sha256 хэш"];
      }) {})
    ];

    # Запуск newm-atha
    system.services.startNewm = {
      enable = true;
      start = "${pkgs.newm-atha}/bin/start-newm -d";
    };

    # Выполнение необходимых действий
    system.activationScripts = ''
      # Действие 1
      echo "Выполняется действие 1..."

      # Действие 2
      echo "Выполняется действие 2..."
    '';
  };

    # ----------------------------------
    # 7) Не использовать файл configuration.nix
    # ----------------------------------
    configurationNix = null;
    
    # ------------------------------------------------
    # 8) Характеристики системы и безопасность
    # ------------------------------------------------
    systemCharacteristics = {
      reliability = "high";
      stability = "high";
      performance = "high";
      security = "systemd-free";
    };

    # -------------------------------------------------
    # 9) Настройки для легкой переносимости системы
    # -------------------------------------------------
    portableSettings = {
      host = "libre-server";
    };

    # -------------------------------------------------
    # 10) Полная конфигурация для использования unstable NixOS
    # -------------------------------------------------
    unstableNixOS = {
      enable = true;
      location = builtins.fetchTarball {
        url = "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz";
      };
    };

    # ----------------------------------------------------------
    # 11) Включение и настройка необходимых пакетов
    # ----------------------------------------------------------
    necessaryPackages = {
      libressl = { enable = true; };
      dhcpcd = { enable = true; };
      util-linux = { enable = true; };
      micro = { enable = true; };
      fonts = { enable = true; };
      keyMap = { enable = true; };
      qemu-kvm = { enable = true; };
      alsa-utils = { enable = true; };
      alsa-lib = { enable = true; };
      alsa-plugins = { enable = true; };
      mesa = { enable = true; };
      alacritty = { enable = true; };
      sakura = { enable = true; };
      htop = { enable = true; };
      links = { enable = true; };
      imv = { enable = true; };
      mpv = { enable = true; };
      ranger = { enable = true; };
      libav-tools = { enable = true; };
      eudev = { enable = true; };
      eudev-libs = { enable = true; };
      udevil = { enable = true; };
      gpm = { enable = true; };
      xfe = { enable = true; };
      
    };


    # ----------------------------------------------------
    # 12) Инструкции для удаления systemd и его зависимостей
    # ----------------------------------------------------
    removeSystemdInstructions = ''              # Отключение systemd и его зависимостей
      systemd = false;
    '';

    # --------------------------------------------------------
    # 13) Предотвращение случайной установки заблокированных пакетов
    # --------------------------------------------------------
    noUnwantedPackages = true;
    packageOverrides = pkgs: {
      unwantedPackages = [
        pkgs.systemd
        pkgs.udisksctl
        pkgs.udisks
        pkgs.udisks2
        pkgs.dbus
        pkgs.openssl
      ];
    };

    # -----------------------------------------------------------
    # 14) Уведомление об установке заблокированных пакетов
    # -----------------------------------------------------------
    blockedPackagesNotification = ''             # Уведомление о заблокированных пакетах при установке
      echo "Вы пытаетесь установить заблокированные пакеты." \
      "Пожалуйста, обратитесь к администратору для получения дополнительной информации." \
    '';

    # -----------------------------------------------------
    # 15) Уведомление об установке заблокированных пакетов вручную
    # -----------------------------------------------------
    blockedPackagesNotificationManual = ''       # Уведомление о заблокированных пакетах при ручной установке
    echo "Этот пакет или его зависимости заблокированы." \
      "Пожалуйста, обратитесь к администратору для получения дополнительной информации." \
    '';

 # --------------------------------------------
  # 16) Замена sudo на doas
  # --------------------------------------------
  security.sudo.enable = false;                # Отключение sudo
  security.doas.enable = true;                 # Включение doas

  # ---------------------------------------------------------
  # 17) Использование wpa_supplicant вместо NetworkManager
  # ---------------------------------------------------------
  networking.wireless.networkManager = false; # Отключение NetworkManager
  networking.wireless.enable = true;           # Включение беспроводной сети
  networking.wireless.wpaSupplicant.enable = true; # Включение wpa_supplicant

  # -------------------------------------------------------------
  # 18) Настройка mpv с аппаратным ускорением и поддержкой видео
  # -------------------------------------------------------------
  hardwareAcceleration = {                                 
    enable = true;                                        # Включение аппаратного ускорения
    vaapi = {                                             # Настройка VA-API
      enable = true;                                      # Включение VA-API
      videoCodecs = [ "VP9" ];                            # Поддержка видеокодека VP9
    };
  };
  packageOverrides = pkgs: {                               # Замена пакета libav-tools на ffmpeg
    libav-tools = pkgs.ffmpeg;
  };
  users.extraUsers.user.extraGroups = [ "video" ];          # Добавление пользователя в группу video

  # ---------------------------------------------------
  # 19) Использование eudev - udevil - xfe для монтирования по клику
  # ---------------------------------------------------
  programs.xfe.enable = true;
  programs.xfe.extraOptions = "--mountcmd=\"/usr/bin/udevil mount %p1\"";      # Включение автоматического монтирования

  # ----------------------------------------------
  # 20) Использование sysvinit для управления службами
  # ----------------------------------------------
  boot.init.systemd.enable = false;                        # Отключение systemd
  boot.init.sysvinit.enable = true;                         # Включение sysvinit

  # ----------------------------------
  # 21) Использование Wayland
  # ----------------------------------
  services.xserver.displayManager.wayland.enable = true;    # Включение Wayland

  # -------------------------------------
  # 22) Установка и настройка раскладок
  # -------------------------------------
  console = {
    keyMap = "us";                                          # Установка клавиатурной раскладки по умолчанию
    font = "Lat2-Terminus16";                                # Установка шрифта консоли
  };
  i18n = {
    consoleFont = {                                         # Настройка шрифта консоли
      "Lat2-Terminus16-"
      "Latin2"
      "Latin3"
    };
    defaultLocale = "ru_RU.UTF-8";                           # Установка языка по умолчанию
    systemLocale = "ru_RU.UTF-8";                            # Установка системного языка
    userLocale = "ru_RU.UTF-8";                                # Установка языка пользователя
    keyboards = [                                            # Настройка раскладок клавиатуры
      {layoutVariant = "us"; options = "grp:ctrl_shift_toggle";}
      {layoutVariant = "ru"; options = "grp:ctrl_shift_toggle";}
      {layoutVariant = "lt"; options = "grp:ctrl_shift_toggle";}
    ];
  };

  # -----------------------------------
  # 23) Установка временной зоны Minsk
  # -----------------------------------
  time.timeZone = "Europe/Minsk";                            # Установка временной зоны

  # --------------------------------------
  # 24) Установка языка и директорий
  # --------------------------------------
  i18n = {
    defaultLocale = "ru_RU.UTF-8";                           # Установка языка по умолчанию
    systemLocale = "ru_RU.UTF-8";                            # Установка системного языка
  };
  users.users.admin.home = "/home/admin";                     # Директория пользователя admin на английском
  users.users.sur.home = "/home/sur";                         # Директория пользователя sur на английском
  users.users.user.home = "/home/user";                       # Директория пользователя user на английском
  users.users.admin.extraGroups = [ "users" ];                 # Добавление пользователя в группу users
  users.users.sur.extraGroups = [ "users" ];                   # Добавление пользователя в группу users
  users.users.user.extraGroups = [ "users" ];                  # Добавление пользователя в группу users

  # ------------------------------------
  # 25) Использование ALSA для аудио
  # ------------------------------------
  sound.enable = true;                                       # Включение звука
  sound.alsa.enable = true;                                  # Использование ALSA

  # -----------------------------------------
  # 26) Использование оболочки Fish вместо Bash
  # -----------------------------------------
  environment.shell = "fish";                                # Использование оболочки Fish


  # --------------------------------------
  # 27) Подробные настройки загрузчика
  # --------------------------------------
  boot.loader = {
    systemd-boot.enable = false;                             # Отключение systemd-boot
    grub.enable = true;                                      # Включение GRUB
    grub.device = "/dev/sda";                                # Установка устройства для GRUB
    ...
  };

  # ---------------------------------------------------
  # 28) Подробные настройки ядра Linux LTS последней версии
  # ---------------------------------------------------
  boot.kernelPackages = pkgs.linuxPackages_5_10;            # Выбор версии ядра
  kernelParams = [                                           # Параметры загрузки ядра
    "quiet"
    ...
  ];

  # --------------------------------------------------
  # 29) Запрет использования пакетов с неполностью свободной лицензией
  # --------------------------------------------------
  packageOverrides = pkgs: {
    nonFreePackages = pkgs.lib.filterAttrs (name: pkg: !pkg.meta.license.free);
  };

  # ----------------------------------------------
  # 30) Подробные настройки сети
  # ----------------------------------------------
  networking = {
    hostName = "libre-server";                                    # Имя хоста
    interfaces = {
      eth0 = {
        ipv4.addresses = [ "192.168.0.10/24" ];              # Настройка IPv4 адреса
        ipv4.gateway = "192.168.0.1";                        # Настройка IPv4 шлюза
      };
      wlan0 = {
        wireless.enable = true;                              # Включение беспроводной сети
        wireless.ssid = "MySSID";                            # Настройка SSID
        wireless.security = {                                # Настройка безопасности
          psk = "MyPassword";                                # Настройка пароля
        };
      };
    };
    nameservers = [ "8.8.8.8" "8.8.4.4" ];                   # Настройка DNS серверов
  };

  # -----------------------------------------------------------------
  # 31) Включение брандмауэра NixOS и Nftables
  # -----------------------------------------------------------------
  networking.firewall.enable = true;                        # Включение брандмауэра
  networking.firewall.nftables.enable = false;               # Включение Nftables

  # -------------------------------------------------------------------
  # 32) Настройки пользователей admin, sur и user со следующими ограничениями и правами
  # -------------------------------------------------------------------
  users.users.admin = {
    isNormalUser = true;
    uid = 1000;
    home = "/home/admin";
    extraGroups = [ "wheel" ];
    createHome = true;
    password = "admin_password";
  };
  users.users.sur = {
    isNormalUser = true;
    uid = 1001;
    home = "/home/sur";
    createHome = true;
    password = "sur_password";
    extraGroups = [ "kvm" "kata-containers" ];
  };
  users.users.user = {
    isNormalUser = true;
    uid = 1002;
    home = "/home/user";
    createHome = true;
    password = "user_password";
  };
  fileSystems."/".permissions = "0550";                      # Установка прав доступа для "/"
  fileSystems."/home/admin".permissions = "0700";            # Установка прав доступа для "/home/admin"
  fileSystems."/home/admin".owner = "admin";                 # Установка владельца для "/home/admin"
  fileSystems."/home/sur".permissions = "0700";              # Установка прав доступа для "/home/sur"
  fileSystems."/home/sur".owner = "sur";                     # Установка владельца для "/home/sur"
  fileSystems."/home/user".permissions = "0700";             # Установка прав доступа для "/home/user"
  fileSystems."/home/user".owner = "user";                   # Установка владельца для "/home/user"

  # -------------------------------------------
  # 33) Включение нестабильной версии NixOS
  # -------------------------------------------
  nixos.unstable = true;


  # ----------------------------------------------
  # 34) Указание URL исходного репозитория Nixpkgs
  # ----------------------------------------------
  inputs.nixpkgs.url = "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz";

  # ----------------------------------------------
  # 35) Добавление опции system.stateVersion
  # ----------------------------------------------
  system.stateVersion = "23.11";

  # ------------------------------------------
  # 36) Добавление настроек ядра Linux
  # ------------------------------------------
  boot = {
    kernelParams = [
      "nosuid",          # Запрещаем выполнение программ с битами SUID/SGID
      "noexec",          # Запрещаем выполнение программ из tmp-папок
      "noroot",          # Запрещаем использование root-прав для юзеров
      "apparmor=1 security=apparmor",  # Включаем режим AppArmor
      "rootflags=discard"  # Активация TRIM для SSD
    ];

  kernelModules = [
    "bluetooth",              # Другие модули ядра (если есть)
    "firewire",
    "ata_piix"          # Проверка поддержки TRIM для SSD
  ];
  
    kernelSysctl = {
    "kernel.yama.ptrace_scope" = "3";  # Устанавливаем жесткий уровень ограничений для отладки процессов
    };
  };

  # -----------------------------------------
  # 37) Настройка использования BIOS вместо UEFI
  # -----------------------------------------
  boot.loader = {
    efi.canTouchEfiVariables = false;
  };

  # -----------------------------------------------
  # 38) Отключение показа меню GRUB
  # -----------------------------------------------
  boot.loader.grub.enable = true;
  boot.loader.grub.enableOSProber = false;
  boot.loader.grub.extraEntries = '';


  # --------------------------------------------------
  # 39) Использование пакета mesa для работы с графической подсистемой newm-atha на Wayland
  # --------------------------------------------------
  hardware.opengl.driSupport = true;
  hardware = {
    gpuDrivers = [ "mesa" ];
  };
  
  
  # --------------------------------------------------
  # 40) Автомотическое обновление системы
  # -------------------------------------------------- 
  periodicUpdate = {
    enable = true;
    interval = "1 day";  # или любой другой желаемый интервал
    };
  };
}
